Cloudflare CDN のオリジンとして CloudFront を設定してみた
Amazon CloudFront で公開中のウェブ配信環境の前段に Cloudflareを配置、エンドツーエンドで暗号化された CDN環境を設定する機会がありましたので、紹介させていただきます。
構成
手順
ACM
CloudFrontで利用する証明書、バージニアリージョンの AWS Certificate Manager (ACM) で発行しました。
- Cloudflare で 公開するFQDNに 一致する パブリック証明書を発行しました。
- 検証方法はDNS検証
- ACMで指定された CNAME レコード を Cloudflare 管理のDNSに反映しました
CloudFront
- ACMで作成した 証明書を カスタム SSL 証明書として選択
- 代替ドメイン名 (CNAME) として、Cloudflare で公開するFQDNを設定しました
Cloudflare
DNS設定
コンテンツ公開用のDNSレコードを追加しました。
- Type: CNAME
- Name : 公開ホスト名
- Target : CloudFrontのディストリビューションドメイン名
- Proxy status: Proxied
SSL/TLS
CloudFront は ACMで発行された証明書が利用できるのでフル (厳密) を指定、 エンドツーエンドの暗号化となる設定しました。
動作確認
Chrome を利用して Cloudflare の公開URLの動作確認を試みました。
レスポンスヘッダ
レスポンスヘッダ「server cloudflare」が追加されました。
通信先のリモートアドレス、Cloudflare のIPアドレスでした。
$ whois 2606:4700:4400::6812:229d (略) NetRange: 2606:4700:: - 2606:4700:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF CIDR: 2606:4700::/32 NetName: CLOUDFLARENET NetHandle: NET6-2606-4700-1 Parent: NET6-2600 (NET6-2600-1) NetType: Direct Allocation OriginAS: AS13335 Organization: Cloudflare, Inc. (CLOUD14) RegDate: 2011-11-01 Updated: 2017-02-17 Comment: All Cloudflare abuse reporting can be done via https://www.cloudflare.com/abuse Ref: https://rdap.arin.net/registry/ip/2606:4700::
Cloudflare プロキシ無効化
CloudflareのDNSレコード設定でプロキシを無効化「DNSのみ」と設定する事で、通常のCNAMEレコードを戻す利用も可能です。
- レスポンスヘッダーの「server」は Amazon S3が戻ります。
名前解決
「DNSのみ」で設定したCNAMEレコードは、CloudFrontのIPアドレスが戻ります。
- DNSのみ
$ host host.example.com host.example.com is an alias for xxxx.cloudfront.net. xxxx.cloudfront.net has address 13.33.174.122 xxxx.cloudfront.net has address 13.33.174.8 xxxx.cloudfront.net has address 13.33.174.120 xxxx.cloudfront.net has address 13.33.174.124 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:fc00:f:e358:a300:93a1 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:9c00:f:e358:a300:93a1 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:1200:f:e358:a300:93a1 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:1c00:f:e358:a300:93a1 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:400:f:e358:a300:93a1 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:c600:f:e358:a300:93a1 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:fa00:f:e358:a300:93a1 xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:1e00:f:e358:a300:93a1
CNAMEレコードを「プロキシ済み」で設定すると、名前解決で Cloudflare の IPアドレスが戻りCDN機能も利用可能となります。
$ host host.example.com host.example.com has address 172.67.222.189 host.example.com has address 104.21.94.112 host.example.com has IPv6 address 2606:4700:3037::ac43:debd host.example.com has IPv6 address 2606:4700:3036::6815:5e70
ホストヘッダのオーバーライド
Cloudflareの ページルール (Cloudflare Pages Rule) で「ホストヘッダーオーバーライド」を設定、 CloudFrontのディストリビューションドメイン名をホストヘッダーに書き換える事で、CloudFront側の代替ドメイン名 (CNAME) 設定を省略する事も可能です。
ただし「ホストヘッダーオーバーライド」の利用には、Cloudflareのエンタープライズライセンスを必要とする点にご注意ください。
まとめ
ホストヘッダーの扱いなどに注意が必要でしたが、CloudflareのオリジンとしてCloudFrontを利用する事が出来ました。
Cloudflareで配信するオリジンとしてS3を利用する際、エンドツーエンドの暗号化を特に必須としない場合には、 よりシンプルに使えるS3 静的ウェブサイトの利用もご検討ください。